官方說明文件:https://sinotrade.github.io/tutor/market_data/historical/#kbar-data
api.kbars使用參數說明如下:
api.kbars(
contract: BaseContract, #所要抓取kbars資料的Contract物件
start: str = (dt.date.today() - dt.timedelta(days=1)).strftime("%Y-%m-%d"), #開始日期,預設為昨天
end: str = dt.date.today().strftime("%Y-%m-%d"), #結束日期,預設為今天
timeout: int = 30000, #timeout時間,預設為30000ms
cb: typing.Callable[[Kbars], None] = None,
)
若要取得單一交易日的kbars資料,範例如下:
# 取得2330,2021/9/17的kbars資料
kbars = api.kbars(api.Contracts.Stocks["2330"], start="2021-09-17", end="2021-09-17")
若要取得特定日期區間的kbars資料,範例如下:
# 取得2330,2021/9/13~2021/9/17的kbars資料
kbars = api.kbars(api.Contracts.Stocks["2330"], start="2021-09-13", end="2021-09-17")
跟前一篇的ticks一樣,api.kbars回傳的資料為shioaji.data.Kbars物件
屬性說明如下:
屬性 | 值 | 說明 |
---|---|---|
ts | [1631869260000000000] | 時間戳 |
Open | [600.0] | 開盤 |
High | [601.0] | 最高 |
Low | [600.0] | 最低 |
Close | [601.0] | 收盤 |
Volume | [1316] | 成交量 |
Amount | [789625000.0] | 成交金額 |
跟前一篇的ticks資料一樣,在將kbars資料轉換為DataFrame前,要先把kbars物件內容先轉換為Dict
程式範例如下:
df = pd.DataFrame({**kbars}) #先將Kbars物件轉換為Dict,再傳入DataFrame做轉換
df.ts = pd.to_datetime(df.ts) #將原本的ts欄位中的資料,轉換為DateTime格式並回存
print(df) #將DataFrame的資料輸出至console中
執行print(df)後,原本的資料內容,已變成下列的格式
ts High Amount Low Open Volume Close
0 2021-09-17 09:01:00 601.0 7.896250e+08 600.0 600.0 1316 601.0
1 2021-09-17 09:02:00 601.0 7.622000e+07 600.0 600.0 127 600.0
2 2021-09-17 09:03:00 601.0 1.860700e+07 600.0 600.0 31 600.0
3 2021-09-17 09:04:00 601.0 5.766500e+07 600.0 600.0 96 601.0
4 2021-09-17 09:05:00 601.0 1.742300e+07 600.0 601.0 29 600.0
.. ... ... ... ... ... ... ...
261 2021-09-17 13:22:00 609.0 1.948600e+07 608.0 609.0 32 609.0
262 2021-09-17 13:23:00 609.0 2.373700e+07 608.0 609.0 39 609.0
263 2021-09-17 13:24:00 609.0 4.199200e+07 608.0 609.0 69 609.0
264 2021-09-17 13:25:00 609.0 3.287100e+07 608.0 609.0 54 608.0
265 2021-09-17 13:30:00 600.0 1.324920e+10 600.0 600.0 22082 600.0
從上面的輸出結果,可以看到kbars的資料時間都是一分鐘一筆資料,也就是對應K線的最小單位-1分鐘圖(1分K)。